/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.mowa.biblioteca.controller;

/**
 *
 * @author Osamu
 */
import com.mowa.biblioteca.model.EstadoUsuarioLibro;
import com.mowa.biblioteca.model.Libro;
import com.mowa.biblioteca.model.Usuario;
import com.mowa.biblioteca.model.Usuariolibro;
import com.mowa.biblioteca.service.UsuarioLibroService;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class UsuarioLibroController {
   
    private UsuarioLibroService usuarioLibroService;

    @Autowired
    public  UsuarioLibroController(UsuarioLibroService usuarioLibroService){
        this.usuarioLibroService = usuarioLibroService;
    }

    @RequestMapping(value="/servicios.htm", method=RequestMethod.GET)
    public void serviciosLibro(){
    }

    @RequestMapping(value="/reservas.htm", method=RequestMethod.GET)
    public String listaReservas(Model model, @ModelAttribute("usuarioReservas") Usuariolibro usuarioLibro){

        List<Usuariolibro> usuarioslibros = usuarioLibroService.obtenerReservas();
       // EstadoUsuarioLibro eul = new EstadoUsuarioLibro();
       // eul.setIdestado(1);
       // usuarioLibro.setEstadousuariolibro(eul);
        model.addAttribute("usuarioReservas", usuarioslibros);
        model.addAttribute("usuariolibro",  new Usuariolibro());
        return "reservas";
    }

    @RequestMapping(value="/prestamos.htm", method=RequestMethod.GET)
    public String listaPrestamos(Model model, @ModelAttribute("listaPrestamos") Usuariolibro usuarioLibro){

        List<Usuariolibro> usuarioslibros = usuarioLibroService.obtenerUsuariolibro(usuarioLibro);
        EstadoUsuarioLibro eul = new EstadoUsuarioLibro();
        eul.setIdestado(3);
        usuarioLibro.setEstadousuariolibro(eul);
        model.addAttribute("listaPrestamos", usuarioslibros);
        model.addAttribute("usuarioLibro", usuarioLibro);
        return "prestamos";
    }

      
    @RequestMapping(value = "/mantReserva.htm", method = RequestMethod.GET)
    public @ModelAttribute("usuariolibro")
    Usuariolibro verUsuarioU(@RequestParam(value = "idusuariolibro", required = false) Integer idusuariolibro) {
        try {
                if (idusuariolibro != null) {
                        Usuariolibro usuariolibro = usuarioLibroService.obtenerUsuariolibro(idusuariolibro);
                        return usuariolibro;
                }

            } catch (Exception e) {
                //throw e.getMessage(); //"mantUsuario";
            }
        return new Usuariolibro();
    }

    @RequestMapping(value="/mantReserva.htm", method=RequestMethod.POST)
    public ModelAndView grabarReservas(Model model, @ModelAttribute("usuariolibro") Usuariolibro usuarioLibro,
            @RequestParam(value = "idusuariolibro", required = true) Integer idusuariolibro){

        ModelAndView mav = new ModelAndView("reservas");
        usuarioLibro.setIdusuariolibro(idusuariolibro);
        usuarioLibroService.grabarUsuariolibro(usuarioLibro);
        List<Usuariolibro> usuarioslibros = usuarioLibroService.obtenerReservas();
        mav.addObject("usuarioReservas", usuarioslibros);
        model.addAttribute("usuario", new Usuario());
        return mav;
/* <form:hidden path="libro.idlibro" />
                          <form:hidden path="usuario.idusuario" />
                           <form:hidden path="idusuariolibro" />*/
    }


    @RequestMapping(value="/mantPrestamo.htm", method=RequestMethod.GET)
    public void registrarPrestamos( ){

    }


    @RequestMapping(value="/historial.htm", method=RequestMethod.GET)
    public ModelAndView verHistorial(Model model, @ModelAttribute("usuariolibro") Usuariolibro usuarioLibro){

        ModelAndView mav = new ModelAndView("historial");
        
        List<Usuariolibro> usuarioslibros = usuarioLibroService.obtenerUsuariolibro(new Usuariolibro());

        mav.addObject("usuarioReservas", usuarioslibros);
        model.addAttribute("usuariolibro", new Usuariolibro());
        return mav;
    }

    @RequestMapping(value="/historial.htm", method=RequestMethod.POST)
    public ModelAndView verHistorialFiltro(Model model, @ModelAttribute("usuariolibro") Usuariolibro usuarioLibro){

        ModelAndView mav = new ModelAndView("historial");

        List<Usuariolibro> usuarioslibros = usuarioLibroService.obtenerUsuariolibro(usuarioLibro);

        mav.addObject("usuarioReservas", usuarioslibros);
        model.addAttribute("usuariolibro", new Usuariolibro());
        return mav;
    }
    
    @ModelAttribute("listaEstados")
    public   List<EstadoUsuarioLibro> listaEstados() {
        List<EstadoUsuarioLibro> lista = usuarioLibroService.obtenerListaEstadoUsuarioLibro();
        return lista;
    }

    @ModelAttribute("listaUsuarios")
    public   List<Usuario> listaUsuarios() {
        List<Usuario> lista = usuarioLibroService.listarUsuarios();
        return lista;
    }

    @ModelAttribute("listaLibros")
    public   List<Libro> listaLibros() {
        List<Libro> lista = usuarioLibroService.obtenerLibros();
        return lista;
    }


    @RequestMapping(value="/reservas_u.htm", method=RequestMethod.GET)
    public ModelAndView listaReservasU(Model model, @ModelAttribute("usuariolibro") Usuariolibro usuarioLibro,
            @RequestParam(value = "idusuariolibro", required = false) Integer idusuariolibro){

        ModelAndView mav = new ModelAndView("reservas_u");

        if (idusuariolibro!=null) {

            EstadoUsuarioLibro eul = new EstadoUsuarioLibro();
            Usuariolibro us = usuarioLibroService.obtenerUsuariolibro(idusuariolibro);

            eul.setIdestado(2);
            us.setEstadousuariolibro(eul);
            us.setVencido(0);
            us.setFechadevolucion(null);
            usuarioLibroService.modificarUsuariolibro(us);

        }

        List<Usuariolibro> usuarioslibros = usuarioLibroService.obtenerReservas();

        mav.addObject("usuarioReservas", usuarioslibros);
        model.addAttribute("usuariolibro", new Usuariolibro());
        return mav;
    }

    @RequestMapping(value="/reservas_u.htm", method=RequestMethod.POST)
    public ModelAndView eliminarReservasU(Model model, @ModelAttribute("usuariolibro") Usuariolibro usuarioLibro,
            @RequestParam(value = "idusuariolibro", required = true) Integer idusuariolibro){

        ModelAndView mav = new ModelAndView("reservas_u");
        EstadoUsuarioLibro eul = new EstadoUsuarioLibro();
        eul.setIdestado(2);

        usuarioLibro.setEstadousuariolibro(eul);
        usuarioLibro.setIdusuariolibro(idusuariolibro);

        usuarioLibroService.modificarUsuariolibro(usuarioLibro);

        eul.setIdestado(1);
        usuarioLibro.setEstadousuariolibro(eul);
        List<Usuariolibro> usuarioslibros = usuarioLibroService.obtenerReservas();

        mav.addObject("usuarioReservas", usuarioslibros);
        model.addAttribute("usuariolibro", new Usuariolibro());
        return mav;
    }


}
